从 Google Apps 脚本将文件上传到 IPFS 节点
Upload a file to an IPFS node from Google Apps Script
我正在尝试使用 Google Apps 脚本 (GAS) 将文件上传到 IPFS 节点,但没有成功。
但是,我能够使用 Postman 成功上传文件。不幸的是,Postman 只返回最接近 GAS 的源代码片段作为 JavaScript - 获取代码,它不像在 GAS 中那样工作。
在 GAS 中,身份验证部分正在工作,我知道这是因为如果我正在更改不记名令牌,那么我会收到无效凭据错误而不是“无效请求格式”。
在我从服务器收到“请求格式无效”错误时附加测试代码。
出于测试目的,需要上传的文件可以使用脚本即时创建,但最终必须是来自 Google 驱动器的文件。
function test() {
let myHeaders = {'Authorization': 'Bearer ...'};
let fileBlob = Utilities.newBlob('Hello!', 'text/plain', 'TestFile.txt');
let formdata = {'file': fileBlob,
'pinataMetadata': {'name': 'TestFileNewName.txt','keyvalues': {'MetaData1': 'Test1', 'MetaData2': 'Test2'}},
'pinataOptions': {'cidVersion': 0}};
let requestOptions = {
method: 'post',
headers: myHeaders,
papyload: formdata,
muteHttpExceptions: true
};
let url = "https://api.pinata.cloud/pinning/pinFileToIPFS";
let response = UrlFetchApp.fetch(url, requestOptions);
let responeText = JSON.parse(response.getContentText());
Logger.log(responeText);
}
如果您的Bearer ...
访问令牌是使用API的有效值,那么下面的修改怎么样?从the official document,我认为在你的formdata
的情况下,pinataMetadata
和pinataOptions
的值可能需要是字符串类型。
发件人:
let formdata = {'file': fileBlob,
'pinataMetadata': {'name': 'TestFileNewName.txt','keyvalues': {'MetaData1': 'Test1', 'MetaData2': 'Test2'}},
'pinataOptions': {'cidVersion': 0}};
收件人:
let formdata = {
'file': fileBlob,
'pinataMetadata': JSON.stringify({ 'name': 'TestFileNewName.txt', 'keyvalues': { 'MetaData1': 'Test1', 'MetaData2': 'Test2' } }),
'pinataOptions': JSON.stringify({ 'cidVersion': 0 })
};
另外,请将papyload: formdata,
修改为payload: formdata,
。 已经提到了这一点
大师点评.
参考文献:
我正在尝试使用 Google Apps 脚本 (GAS) 将文件上传到 IPFS 节点,但没有成功。 但是,我能够使用 Postman 成功上传文件。不幸的是,Postman 只返回最接近 GAS 的源代码片段作为 JavaScript - 获取代码,它不像在 GAS 中那样工作。
在 GAS 中,身份验证部分正在工作,我知道这是因为如果我正在更改不记名令牌,那么我会收到无效凭据错误而不是“无效请求格式”。
在我从服务器收到“请求格式无效”错误时附加测试代码。
出于测试目的,需要上传的文件可以使用脚本即时创建,但最终必须是来自 Google 驱动器的文件。
function test() {
let myHeaders = {'Authorization': 'Bearer ...'};
let fileBlob = Utilities.newBlob('Hello!', 'text/plain', 'TestFile.txt');
let formdata = {'file': fileBlob,
'pinataMetadata': {'name': 'TestFileNewName.txt','keyvalues': {'MetaData1': 'Test1', 'MetaData2': 'Test2'}},
'pinataOptions': {'cidVersion': 0}};
let requestOptions = {
method: 'post',
headers: myHeaders,
papyload: formdata,
muteHttpExceptions: true
};
let url = "https://api.pinata.cloud/pinning/pinFileToIPFS";
let response = UrlFetchApp.fetch(url, requestOptions);
let responeText = JSON.parse(response.getContentText());
Logger.log(responeText);
}
如果您的Bearer ...
访问令牌是使用API的有效值,那么下面的修改怎么样?从the official document,我认为在你的formdata
的情况下,pinataMetadata
和pinataOptions
的值可能需要是字符串类型。
发件人:
let formdata = {'file': fileBlob,
'pinataMetadata': {'name': 'TestFileNewName.txt','keyvalues': {'MetaData1': 'Test1', 'MetaData2': 'Test2'}},
'pinataOptions': {'cidVersion': 0}};
收件人:
let formdata = {
'file': fileBlob,
'pinataMetadata': JSON.stringify({ 'name': 'TestFileNewName.txt', 'keyvalues': { 'MetaData1': 'Test1', 'MetaData2': 'Test2' } }),
'pinataOptions': JSON.stringify({ 'cidVersion': 0 })
};
另外,请将papyload: formdata,
修改为payload: formdata,
。 已经提到了这一点
大师点评.